package current.limiting.service;

import current.limiting.annotions.Limiting;

/**
 * 接口限流策略服务接口
 *
 * @author LiKun
 * @date 2021/10/25 14:20
 */
public interface CurrentLimitStrategy {

    /**
     * 判断当前请求是否被允许访问接口
     *
     * @param id       限流ID
     * @param limiting 限流数据
     *
     * @return 是否允许访问
     */
    boolean isAllowAccess(String id, Limiting limiting) throws InterruptedException;

    /**
     * 后续操作的回调函数
     *
     * @param id        限流ID
     * @param key       限流标识
     * @param blockTime 剩余阻塞时间
     * @param limiting  限流数据
     *
     * @return 回调处理结果
     */
    boolean callBackHandler(String id, String key, long blockTime, Limiting limiting) throws InterruptedException;

}
